/**
 * 方法重载
 * 对象有数组进行封装
 * 提供get方法 remove 方法 显示方法 show
 *  其中的需求remove二个方法们需要使用方法重载来实现 传入什么参数就返回什么参数
 */

class ArrayList{
  constructor(public element: Array<object>){}

  /**
   * 获取某一个值
   * @param index 
   * @returns 
   */
  get(index:number){
    return this.element[index]
  }
  // 显示值
  show(){
    this.element.forEach(i=>console.log(i))
  }

  // 实现删除方法重载
  remove(val:number):number
  remove(val:Object):Object
  remove(val:number | Object){
    this.element = this.element.filter((e,index)=>{
      if(typeof val === 'number'){
          return val !== index
      }else{
        return val !== e
      }
    })
  return val;
  }

}
let a = {name:'zixia',age:12},b= {name:'selfsummer',age:88},c= {name:'自夏',age:18}

let newAr = new ArrayList([a,b,c]);

// console.log(newAr.get(0))
// newAr.show()


console.log('删除的值',newAr.remove(c))
// newAr.show()
export {}